home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************/
- /* */
- /* TSINPUTL.H */
- /* */
- /* Copyright (c) 1992, Vincent J. Dentice */
- /* All rights reserved */
- /* */
- /* */
- /* Date Prg Ver Description */
- /* -------- --- --- ------------------------------------------------- */
- /* 09/30/92 VJD 0.1 Initial module definition. */
- /* 11/16/92 VJD 0.2 Added streamability to TStaticInputLine class. */
- /* 11/17/92 VJD 0.3 Replaced matchFirstChar() function with member */
- /* function getNextMatch(). */
- /* 11/17/92 RG 0.3 Added functionality to jump to the beginning and */
- /* end of the list by using the HOME and END keys. */
- /* This code was supplied by Robert Gloeckner */
- /* (100034,3033). */
- /* */
- /*************************************************************************/
-
- #include <ctype.h>
- #include <string.h>
-
- #define Uses_TEvent
- #define Uses_TKeys
- #define Uses_TStaticInputLine
- #define Uses_TStreamableClass
- #include "tsinputl.h"
-
- Boolean matchFirstChar(void *, void *);
-
-
- TStaticInputLine::TStaticInputLine(const TRect& bounds, int aMaxLen, TCollection *aList) :
- TInputLine(bounds, aMaxLen)
- {
- list = aList;
- }
-
-
- void *TStaticInputLine::getNextMatch(char testChar)
- {
- return (char *)list->firstThat(matchFirstChar, &testChar);
- }
-
-
- void TStaticInputLine::handleEvent(TEvent& event)
- {
- char key, testChar[2];
- char *tempData;
- ccIndex index;
-
- if (event.what == evKeyDown) {
- if (isprint(event.keyDown.charScan.charCode)) {
- testChar[0] = event.keyDown.charScan.charCode;
- testChar[1] = '\0';
- tempData = (char *)getNextMatch(testChar[0]);
- if (tempData != 0) {
- strcpy(data, tempData);
- selectAll(True);
- drawView();
- }
- clearEvent(event);
- }
- else
- switch (event.keyDown.keyCode) {
- case kbUp :
- index = list->indexOf(data) - 1;
- if (index < 0)
- index = list->getCount() - 1;
- strcpy(data, (char *)list->at(index));
- selectAll(True);
- drawView();
- clearEvent(event);
- break;
-
- case kbDown :
- index = list->indexOf(data) + 1;
- if (index >= list->getCount())
- index = 0;
- strcpy(data, (char *)list->at(index));
- selectAll(True);
- drawView();
- clearEvent(event);
- break;
-
- case kbHome:
- index = 0;
- strcpy(data, (char *)list->at(index));
- selectAll(True);
- drawView();
- clearEvent(event);
- break;
-
- case kbEnd:
- index = list->getCount() - 1;
- strcpy(data, (char *)list->at(index));
- selectAll(True);
- drawView();
- clearEvent(event);
- break;
-
- case kbLeft :
- case kbRight :
- case kbBack :
- case kbIns :
- case kbDel : clearEvent(event);
- }
- }
- TInputLine::handleEvent(event);
- }
-
-
- void TStaticInputLine::newList(TCollection *aList)
- {
- if (list)
- destroy(list);
- list = aList;
- drawView();
- }
-
-
- void *TStaticInputLine::read( ipstream& is )
- {
- TInputLine::read(is);
- is >> list;
- return this;
- }
-
-
- void TStaticInputLine::write( opstream& os )
- {
- TInputLine::write(os);
- os << list;
- }
-
- TStreamable *TStaticInputLine::build()
- {
- return new TStaticInputLine(streamableInit);
- }
-
-
- TStaticInputLine::TStaticInputLine(StreamableInit) : TInputLine(streamableInit) { }
-
-
-
- Boolean matchFirstChar(void *string1, void *string2)
- {
- char *temp1, *temp2;
-
- temp1 = (char *)string1;
- temp2 = (char *)string2;
-
- if (toupper(temp1[0]) == toupper(temp2[0]))
- return True;
- else
- return False;
- }
-